<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <title>圆锥曲线与二次曲面</title>
    <meta charset="utf-8" />
    <link rel="stylesheet" type="text/css" href="../../css/note.css" />
</head>
<body>

<p>	本章在直角坐标系下研究平面上的二次曲线与空间中的二次曲面.
	没有特别说明, 本章中的坐标系均为直角坐标系.
</p>

<h2>圆</h2>

<h3>圆的相关方程</h3>

<p>	约定 `P = (x,y)`, `P_i = (x_i,y_i)`,
	`f_i(P) = x^2+y^2+D_i x + E_i y + F_i`, `i = 0,1,2,3`.
	圆记为 `C`.
</p>

<table>
	<tr>
		<td></td>
		<td>条件</td>
		<td>方程</td>
	</tr>
	<tr>
		<td>参数方程</td>
		<td>`|P_0 P| = r`</td>
		<td>`{x = x_0 + r cos theta;
			y = y_0 + r sin theta :}`, `theta in [0,2pi)`
		</td>
	</tr>
	<tr>
		<td>标准方程</td>
		<td>`|P_0 P| = r`</td>
		<td>`(x-x_0)^2 + (y-y_0)^2 = r^2`</td>
	</tr>
	<tr>
		<td>一般方程</td>
		<td>`D^2+E^2 gt 4 F`</td>
		<td>`x^2 + y^2 + D x + E y + F = 0`</td>
	</tr>
	<tr>
		<td>直径式</td>
		<td>`vec(P P_1) * vec(P P_2) = 0`</td>
		<td>`(x-x_1)(x-x_2)` `+ (y-y_1)(y-y_2) = 0`</td>
	</tr>
	<tr>
		<td>不共线三点</td>
		<td>不共线的三点 `P_i in C`, `i = 1,2,3`</td>
		<td>`|
				x^2+y^2 , x , y , 1;
				x_1^2+y_1^2 , x_1 , y_1 , 1;
				x_2^2+y_2^2 , x_2 , y_2 , 1;
				x_3^2+y_3^2 , x_3 , y_3 , 1;
			| = 0`</td>
	</tr>
	<tr>
		<td>两圆公共弦</td>
		<td>两圆 `f_i(P) = 0`, `i = 1, 2`</td>
		<td>`f_1(P) - f_2(P) = 0`</td>
	</tr>
	<tr>
		<td>恒过圆与直线交点</td>
		<td>圆 `f(P) = 0`, 直线 `g(P) = 0`</td>
		<td>`f(P) + lambda g(P) = 0`</td>
	</tr>
	<tr>
		<td>恒过两圆交点</td>
		<td>两圆 `f_i(P) = 0`, `i = 1,2`</td>
		<td>`lambda f_1(P) + mu f_2(P) = 0`, `lambda, mu` 不同时为零</td>
	</tr>
	<tr>
		<td>到两定点距离之比为定值</td>
		<td>两定点 `P_i`, `i = 1,2`, 定值 `lambda gt 0`, `lambda != 1`
		</td>
		<td>`(x-x_1)^2 + (y-y_1)^2` `= lambda^2[(x-x_2)^2+(y-y_2)^2]`</td>
	</tr>
</table>

<h3>点/直线与圆的位置关系</h3>

<ul>点 `(x_0,y_0)` 与圆 `(x-a)^2 + (y-b)^2 = r^2` 的位置关系.
	记 `d = sqrt((x-a)^2 + (y-b)^2)`,
	<li>点在圆内 `iff d lt r`, 此时 `sqrt(r^2-d^2) =` 弦长;</li>
	<li>点在圆外 `iff d gt r`, 此时 `sqrt(d^2-r^2) =` 切线长;</li>
	<li>点在圆上 `iff d = r`.</li>
</ul>

<ul>直线 `A x + B y + C = 0` 与圆 `(x-a)^2 + (y-b)^2 = r^2` 的位置关系.
	记 `d = |A a + B b + C|/sqrt(A^2+B^2)`,
	<li>相交 `iff d lt r`;</li>
	<li>相离 `iff d gt r`;</li>
	<li>相切 `iff d = r`.</li>
</ul>

<p class="remark">
	记圆的方程为 `f(P) = (x-x_0)^2+(y-y_0)^2 - r^2 = 0`,
	圆心为 `P_0(x_0,y_0)`, 又设 `P_1` 为平面上一点, 则
	<span class="formula">
		`f(P_1) = |P_0 P_1|^2 - r^2`.
	</span>
	特别当 `P_1` 在圆外时, `f(P_0)` 等于切线长的平方.
</p>

<h2>圆锥曲线</h2>

<p class="definition">
  平面上到两点距离之和为定值的点的轨迹是<b>椭圆</b>;
  到两点距离之差为定值的点的轨迹是<b>双曲线</b>;
  到一点和一直线距离相等的点的轨迹是<b>抛物线</b>.
</p>

<ol class="definition">
  <b>圆锥曲线的统一定义</b>
  平面上到定点的距离与到定直线的距离之比等于定值 `e` 的点的轨迹是圆锥曲线.
  这个定点称为<b>焦点</b>, 定直线称为<b>准线</b>,
  `e` 称为圆锥曲线的<b>离心率</b>.
  <li>`e = 0` 时, 轨迹是圆;</li>
  <li>`0 lt e lt 1` 时, 是椭圆;</li>
  <li>`e = 1` 时, 是抛物线;</li>
  <li>`e gt 1` 时, 是双曲线.</li>
</ol>

<h3>抛物线</h3>

<p class="proposition">
  <b>抛物线的极坐标方程</b> 是 `r = p/(1-cos theta)`, 其中焦点在原点, `p`
  是焦点到准线的距离.
</p>

<p class="proof">
  设准线为 `x = -p`, 焦点在原点, 则抛物线上一点到原点的距离为 `r`,
  到准线距离为 `r cos theta + p`, 令它们相等即得结论.
</p>

<h3>椭圆的方程</h3>

<ol class="theorem">
  设 `P(x, y)` 到点 `F_1(-c, 0)` 和点 `F_2(c, 0)` 的距离分别为
  `r_1`, `r_2`, 且
  <span class="formula">
    `r_1 + r_2 = 2a`, `quad 0 lt c lt a`.
  </span>
  则 `P` 的轨迹为
  <li>极坐标方程 `r_(1,2) = p/(1&mp;e cos theta_(1,2))`;</li>
  <li>直角坐标方程 `x^2/a^2 + y^2/b^2 = 1`.</li>
  其中, 半短轴 `b = sqrt(a^2-c^2)`, 通径 `p = a - c e = b^2/a`,
  离心率 `e = c/a`, 极角 `theta_i` 表示 `r_i` 与 `x` 轴的夹角,
  `i = 1, 2`.
</ol>

<ol class="solution">
  <li>由已知
    <span class="formula">
      `r_(1,2) = sqrt ((x+-c)^2 + y^2)`,
    </span>
    所以
    <span class="formula">
      `r_1^2 - r_2^2 = 4cx`,
      `quad r_1 - r_2 = (r_1^2 - r_2^2)/(r_1 + r_2)`
      `= (4 c x)/(2 a) = 2ex`.
    </span>
    由 `r_1 + r_2 = 2 a`, `r_1 - r_2 = 2e x` 解得
    <span class="formula">
      `r_(1,2) = a +- e x`.
    </span>
    于是
    <span class="formula">
      `r_2 = a - e(x-c) - c e`
      `= a - c e - e r_2 cos theta_2`
      `= (a - c e)/(1+e cos theta_2)`
      `= p/(1+e cos theta_2)`,
    </span>
    `r_1` 的方程类似.
  </li>
  <li>为得到直角坐标方程, 求 `r_1, r_2` 的平方和
    <span class="formula">
      `r_1^2 + r_2^2`
      `= 1/2 [(r_1 - r_2)^2 + (r_1 + r_2)^2]`
      `= 2(e^2 x^2 + a^2)`.
    </span>
    另一方面, 由 `r_1, r_2` 的表达式直接得到
    <span class="formula">
      `r_1^2 + r_2^2 = 2(x^2 + y^2 + c^2)`
    </span>
    (上式实际上是三角形的中线长公式), 总之
    <span class="formula">
      `x^2 + y^2 + c^2 = e^2 x^2 + a^2`,
    </span>
    即
    <span class="formula">
      `x^2 / a^2 + y^2 / b^2 = 1`.
    </span>
  </li>
</ol>

<h3>图解椭圆</h3>

<ol>设椭圆的方程为 `x^2/a^2 + y^2/b^2 = 1` (`a gt b gt 0`).
  <li><b>`bm (a, b, c)`</b>
    半长轴 `OA = a`, 半短轴 `OB = b`, 半焦距 `OF_1 = OF_2 = c`.
    以 `(0,b)` 为心, `a` 为半径作圆, 与 `x` 轴的交点就是焦点.
  </li>
  <li><b>到原点的距离</b>
    离心率 `e = c/a`, 因此 `b^2/a^2 = 1-e^2`.
    <span class="formula">
      `OP = sqrt(x^2+y^2)`
      `= sqrt(x^2+b^2(1-x^2/a^2))`
      `= sqrt(e^2 x^2 + b^2)`,
    </span>
    因此 `OP` 分别在 `x^2 = 0` 和 `x^2 = a^2` 时取得最小值和最大值.
  </li>
  <li><b>焦半径</b>
    由 `r_1 + r_2 = 2 a`, `r_1 - r_2 = 2 e x` 得
    <span class="formula">
      `r_1 = a + ex`, `quad r_2 = a - ex`.
    </span>
    设 `l = a//e`, 则点 `P` 到焦点 `F_2` 与到准线 `x = l` 的距离之比
    <span class="formula">
      `r_2/(l-x) = (a-ex)/(a//e - x) = e`.
    </span>
  </li>
  <li><b>焦点三角形</b>
    是指两焦半径与焦距围成的三角形.  设两焦半径的夹角为 `theta`,
    由 `(r_1+r_2)^2 = (2a)^2` 减去 `r_1^2 + r_2^2 - 2 r_1 r_2 cos
    theta = (2c)^2` 得
    <span class="formula">
      `r_1 r_2 = (2b^2)/(1+cos theta)`.
    </span>
    于是
    <span class="formula">
      `S_(P F_1 F_2) = 1/2 r_1 r_2 sin theta`
      `= b^2 (sin theta)/(1+cos theta)`
      `= b^2 tan{:theta/2:}`.
    </span>
    由均值不等式, `r_1 r_2 le ((r_1+r_2)/2)^2 = a^2`.  于是
    <span class="formula">
      `cos theta = (2b^2)/(r_1 r_2) - 1`
      `ge 2 b^2/a^2-1`
      `= 2(1-e^2)-1`
      `= 1-2e^2`.
    </span>
    当 `r_1 = r_2` 时 `theta` 取得最大值, `S_(P F_1 F_2)`
    也取得最大值.
  </li>
</ol>

<h2>圆锥曲线与直线的位置关系</h2>

<ul>联立圆锥曲线方程与直线方程, 利用 Vieta 定理:
	<li>椭圆 `x^2/a^2+y^2/b^2 = 1` 与直线 `A x + B y + C = 0`.
		记 `M = A^2 a^2 + B^2 b^2`, `delta = M-C^2`, 则
		`Delta ge 0 iff delta ge 0`,
		<span class="formula">
			`x_1 + x_2 = -2 A C a^2// M`,
			`quad x_1 x_2 = (C^2 - B^2 b^2) a^2// M`,<br/>
			`x_1 y_2 + x_2 y_1 = x_1 (A x_2+C)/(-B) + x_2 (A x_1+C)/(-B)`
			`= (2 A B a^2 b^2)//M`,<br/>
			`|x_1-x_2| = sqrt((x_1+x_2)^2-4x_1 x_2)`
			`= (2 a b|B| sqrt(delta))//M`,<br/>
		</span>
		`y_1, y_2` 的相关公式, 只需将 `A`, `B` 对调, `a, b` 对调即可.
		(前三条公式的系数可以这样记忆: 取 `x_1 = x_2 = y_1 = y_2 = -1`,
		那么 `x_1 + x_2 = -2`, `x_1 x_2 = 1`, `x_1 y_2 + x_2 y_1 = 2`)
	</li>
	<li>双曲线 `x^2/a^2-y^2/b^2 = 1` (或 `y^2/b^2-x^2/a^2 = 1`),
		只需将椭圆的结果中的 `b^2` 换成 `-b^2`
		(`a^2` 换成 `-a^2`) 即可.
	</li>
	<li>抛物线 `y^2 = 2p x` 与直线 `x = m y + n`.
		`Delta ge 0 iff p^2 m^2 + 2 p n ge 0`.
		<span class="formula">
			`y_1 + y_2 = 2 p m`,
			`quad y_1 y_2 = -2 p n`,<br/>
			`x_1 + x_2 = m y_1 + n + m y_2 + n`
			`= 2 p m^2 + 2 n`,
			`quad x_1 x_2 = y_1^2/(2p) y_2^2/(2p) = n^2`.
		</span>
		特别令 `n = p/2`, 焦点弦满足 `x_1 x_2 = p^2/4`, `y_1 y_2 = -p^2`.
	</li>
</ul>

<p>直线 `A x + B y + C = 0` 与双曲线 `x^2/a^2-y^2/b^2 = 1` 的位置关系.
	`A^2 a^2 = B^2 b^2` 时, 若 `C = 0` 则无交点, 若 `C != 0` 有一交点.
	`A^2 a^2 != B^2 b^2` 时, 见下表.
</p>

<table border="1" cellspacing="0">
	<tr>
		<td>`Delta`</td>
		<td>`x_1 x_2`</td>
		<td>`x_1 + x_2`</td>
		<td>交点情况</td>
	</tr>
	<tr>
		<td rowspan="3">`+`</td>
		<td rowspan="2">`+`</td>
		<td>`+`</td>
		<td>两交点都在右支</td>
	</tr>
	<tr>
		<td>`-`</td>
		<td>两交点都在左支</td>
	</tr>
	<tr>
		<td>`-`</td>
		<td></td>
		<td>两支各有一交点</td>
	</tr>
	<tr>
		<td>`0`</td>
		<td></td>
		<td></td>
		<td>有一切点</td>
	</tr>
	<tr>
		<td>`-`</td>
		<td></td>
		<td></td>
		<td>无交点</td>
	</tr>
</table>

<p class="example">
	已知点 `C` 在椭圆 `x^2/a^2 + y^2/b^2 = 1` 上,
	过 `C` 作弦 `C A`, `C B`, 使得 `k_(C A) k_(C B)` 为一常数 `z`.
  证明: `z != b^2//a^2` 时, 直线 `AB` 恒过一定点.
</p>

<ol class="proof">
	设 `A(x_1,y_1)`, `B(x_2,y_2)`, `C(x_0,y_0)`, 直线 `A B: y = k x + t`.
	联立直线与椭圆方程, 利用 Vieta 定理求得 `x_1+x_2`, `y_1+y_2`,
	`x_1 x_2` 和 `y_1 y_2`. 注意 `C` 在椭圆上, 有
	<span class="formula">
		`a^2 y_0^2 + b^2 x_0^2 = a^2 b^2`,
	</span>
	于是
	<span class="formula">
		`z = k_(C A) k_(C B)`
		`= ((y_1-y_0)(y_2-y_0))/((x_1-x_0)(x_2-x_0))`
		`= (y_1 y_2 - y_0(y_1+y_2) + y_0^2)/(x_1 x_2 - x_0(x_1+x_2) +
		x_0^2)`
		`= (b^2(t^2-a^2 k^2) - 2b^2 t y_0 + y_0^2(a^2 k^2+b^2))
		 / (a^2(t^2-b^2) + 2a^2 t k x_0 + x_0^2(a^2 k^2 + b^2))`
		`= b^2/a^2 ((t-y_0)^2 -(k x_0^2))/((t+k x_0)^2 - y_0^2)`.
	</span>
  <li>`z != b^2//a^2` 时,
    取 `P(x_P,y_P) in l_(A B)`, 上式变形得
    <span class="formula">
      `lambda := (b^2 + z a^2)/(b^2 - z a^2)`
      `= t/(y_0 + k x_0)`
      `= (y_P - k x_P)/(y_0 + k x_0)`.
    </span>
    其中 `lambda` 为一常数.  当 `x_P = - lambda x_0`, `y_P = lambda y_0`,
    上式对任意 `k in RR` 成立, 即直线 `AB` 恒过 `P` 点.
    可以看到 `P` 是 `A B` 与直线 `O C'` 的交点, 其中 `C'(-x_0,y_0)`.
    特别地, 令 `z = -b^2//a^2`, 则 `lambda = x_P = y_P = 0`,
    这时直线 `AB` 恒过原点.
  </li>
  <li>
    `z = b^2//a^2` 时, `A B || O C'`, 此时定点不存在.
    (从射影几何的角度看, 此时 `AB` 与 `OC'` 相交于 `OC'` 方向上的无穷远处,
    亦可视为一定点)
  </li>
  <li>最后, 当 `A B` 的斜率不存在时, 容易验证上面的结论仍成立.</li>
</ol>

<h2>二次曲线 (面) 的切线 (面)</h2>

<p class="theorem">
	圆 `(x-a)^2 + (y-b)^2 = r^2`. 过圆外一点 `P(x_0, y_0)`
	引圆的两条切线 `PA, PB`, 切点分别为 `A, B`. 则直线 `AB` 的方程是
	<span class="formula">
		`(x-a)(x_0-a) + (y-b)(y_0-b) = r^2`.
	</span>
	特别, 当 `P` 在圆上时, 这个方程就是过 `P` 的圆的切线方程.
</p>

<p class="proof">
	记圆心为 `S(a, b)`, 注意 `vec(SA) * vec(AP) = 0`, 有
	<span class="formula">
		`  vec(SA) * vec(SP)`
		`= vec(SA) * (vec(SA) + vec(AP))`
		`= |vec(SA)|^2 = r^2`.
	</span>
	即 `A(x_A, x_B)` 满足方程
	<span class="formula">
		`(x-a)(x_0-a) + (y-b)(y_0-b) = r^2`.
	</span>
	同理 `B` 也满足上述方程. 由 `P` 在圆外知 `x_0-a`, `y_0-b` 不同时为零,
	因此上式是一直线方程. 但 `A, B` 都在这一直线上, 所以它是直线 `AB`
	的方程. `P` 在圆上时, 同样计算向量内积可以证明上式是过 `P`
	点的切线方程.
</p>

<p class="theorem">
	过椭圆 `x^2/a^2 + y^2/b^2 = 1` 上一点 `P(x_0,y_0)` 的切线方程为
	<span class="formula">
		`(x_0 x)/a^2 + (y_0 y)/b^2 = 1`.
	</span>
	注意切线斜率与 `OP` 的斜率乘积等于 `-b^2/a^2 = e^2-1`.
</p>

<p class="proof">
	在椭圆方程的两端对 `x` 求导,
	<span class="formula">
		`(2x)/a^2 + (2y)/b^2 y^' = 0`.
	</span>
	记 `k = y'|_((x_0","y_0)) = -(x_0 b^2)/(y_0 a^2)`, 则切线方程为
	<span class="formula">
		`y - y_0 = k(x-x_0)`
		`= -(x_0 b^2)/(y_0 a^2) (x - x_0)`.
	</span>
	利用等式
	<span class="formula">
		`b^2 x_0^2 + a^2 y_0^2 = a^2 b^2`
	</span>
	化简得
	<span class="formula">
		`(x_0 x)/a^2 + (y_0 y)/b^2 = 1`.
	</span>
	易知斜率不存在时, `y_0 = 0`, 上式也是椭圆的切线方程.
</p>

<p class="proof">
	如利用 `Delta = 0`, 则计算繁琐:
	将椭圆方程与过 `(x_0,y_0)` 的直线
	<span class="formula">
		`A(x - x_0) + B(y - y_0) = 0`
	</span>
	联立, 令 `Delta = 0` 得
	<span class="formula">
		`A^2 a^2 + B^2 b^2 = (A x_0 + B y_0)^2`.
	</span>
	`B != 0` 时, 记 `m = A/B`, 解上述二次方程, 注意利用等式
	<span class="formula">
		`b^2 x_0^2 + a^2 y_0^2 = a^2 b^2`,
	</span>
	得一对相等实根
	<span class="formula">
		`m = (x_0 y_0)/(a^2 - x_0^2)`
		`= x_0/(a^2 y_0) (a^2 y_0^2)/(a^2 - x_0^2)`
		`= x_0/(a^2 y_0) (a^2 b^2 - b^2 x_0^2)/(a^2 - x_0^2)`
		`= (x_0 b^2)/(y_0 a^2)`.
	</span> 
	再作类似处理可以得到切线方程.
</p>

<p class="example">
	求椭球面 `x^2 + 2y^2 + 3z^2 = 21` 的过直线 `(6+2t, 3+t, 1/2 -t)`
	的切平面的一般方程.
</p>

<p class="solution">
	该椭球面在 `(x_0, y_0, z_0)` 处的切平面方程为
	<span class="formula">
		`x x_0 + 2y y_0 + 3z z_0 = 21`,
	</span>
	代入点 `(6, 3, 1/2)` 得
	<span class="formula">
		`6 x_0 + 6 y_0 + 3/2 z_0 = 21`.
	</span>
	另一方面, 切平面的法向量 `(x_0, 2y_0, 3z_0)` 与直线的方向向量
	`(2, 1, -1)` 垂直, 有
	<span class="formula">
		`2x_0 + 2y_0 - 3z_0 = 0`.
	</span>
	将所得的两个方程与椭球面的方程联立
	(先从两个一次方程中, 将所有变元用同一变元表出, 再代入二次方程中求解)
	解得切点坐标 `(1, 2, 2)` 与 `(3, 0, 2)`, 代回切平面方程即可.
</p>

<p class="example">
	求球面 `(x-2)^2 + (y-2)^2 + (z-2)^2 = 1/3` 的过直线
	`(1+t, 1+2t, 1+3t)` 的切平面的一般方程.
</p>

<p class="solution">
	设切点为 `(x, y, z)`. 用类似上题的方法, 得
	<span class="formula">`{
		(x-2)^2 + (y-2)^2 + (z-2)^2 = 1/3;
		(x-2) + (y-2) + (z-2) = -1/3;
		(x-2) + 2(y-2) + 3(z-2) = 0;
	:}`</span>
	作变元替换 `a = x-2`, `b = y-2`, `c = z-2` 后, 解方程组求切点.
</p>

<p class="solution">
	只需求过给定直线, 到点 `(2, 2, 2)` 距离为 `1/sqrt(3)` 的平面方程.
	将直线方程化为一般式
	<span class="formula">`{
		2(x-1) = y-1;
		3(x-1) = z-1;
	:}`, `quad` 即 `{
		2x - y - 1 = 0;
		3x - z - 2 = 0;
	:}`</span>
	由于平面 `3x - z - 2 = 0` 到点 `(2, 2, 2)` 的距离为
	`|3*2 - 2 - 2|/sqrt(3^2 + 1^2) != 1/sqrt(3)`, 不是所求的平面,
	故可以设所求平面为
	<span class="formula">
		`2x - y - 1 + lambda (3x - z - 2) = 0`,
	</span>
	它到点 `(2, 2, 2)` 的距离的平方等于
	<span class="formula">
		`[(2 + 3 lambda) * 2 - 2 - 2 lambda - 1 - 2 lambda]^2
		/ [(2 + 3 lambda)^2 + 1 + lambda^2] = 1/3`.
	</span>
	解得 `lambda = +-1`, 从而得到所求平面的方程.
</p>

<h2 id="3-5"> 二元二次方程及其表示的曲线</h2>

<p class="theorem">
	令对称矩阵 `bm A = (a_(i j))_(2 xx 2)`.
	取 `theta` 使得 `cot 2theta = (a_11-a_22)/(2 a_12)`, 则正交矩阵
	`bm T = [cos theta, -sin theta; sin theta, cos theta]`
	将 `bm A` 对角化, 即 `bm (T'A T) = (b_(i j))_(2 xx 2)`
	为对角矩阵. 
	其中 `b_11 = a_11 + a_12 tan theta`,
	`b_22 = a_22 - a_12 tan theta`.
</p>

<p class="proof">
	计算知
	<span class="formula">
		`b_11 = a_11 cos^2 theta + a_22 sin^2 theta
		+ 2a_12 sin theta cos theta`,<br/>
		`b_22 = a_11 sin^2 theta + a_22 cos^2 theta
		- 2a_12 sin theta cos theta`,<br/>
		`b_12 = b_21 = a_12 cos 2theta - (a_11 - a_22)/2 sin 2theta`.
	</span>
	所以
	<span class="formula">
		`b_11 + b_22 = a_11 + a_22`,<br/>
		`b_11 - b_22`
		`= (a_11 - a_22) cos 2 theta + 2 a_12 sin 2 theta`.
	</span>
	`cot 2 theta = (a_11 - a_22) / (2a_12)` 时,
	`b_12 = 0`, 且
	<span class="formula">
		`b_11 = 1/2[(b_11+b_22) + (b_11-b_22)]`
		`= (a_11+a_22)/2 + (a_11-a_22)/2 cos 2 theta`
			`+ a_12 sin 2 theta`
		`= a_11 - (a_11-a_22)/2 (1-cos 2theta) + a_12 sin 2theta`
		`= a_11 + a_12[sin 2theta - cot 2theta(1-cos 2theta)]`
		`= a_11 + a_12 tan theta`,<br/>
		`b_22 = b_11 + b_22 - b_11 = a_11 + a_22 - b_11`
		`= a_22 - a_12 tan theta`.
	</span>
</p>

<p class="example">
	寻找一个正交变换, 将对称矩阵 `bm A = [2, -1; -1, 2]` 对角化.
</p>

<p class="solution">
	令 `|lambda bm E-bm A| = 0`, 即 `(lambda-2)^2 = 1`, 解得特征根 `lambda = 1,3`.
	分别解方程组
	<span class="formula">
		`{ (1-2) x + 1 y = 0; 1 x + (1-2) y = 0 :}`,<br/>
		`{ (3-2) x + 1 y = 0; 1 x + (3-2) y = 0 :}`,
	</span>
	得到特征向量 `(1, 1)` 和 `(1, -1)`, 将它们正交单位化
	(实际上只需单位化,
	因为实对称矩阵的不同特征根对应的特征向量总是正交的) 得到
	<span class="formula">
		`bm epsi_1 = (sqrt2/2, sqrt2/2)`, `quad bm epsi_2 = (sqrt2/2,
		-sqrt2/2)`.
	</span>
	根据特征向量的定义有
	<span class="formula">
		`bm (A epsi)_1 = 1 bm epsi_1`, `quad bm (A epsi)_2 = 3 bm epsi_2`,
	</span>
	写成矩阵形式就是
	<span class="formula">
		`bm A (bm epsi_1, bm epsi_2) = (bm epsi_1, bm epsi_2) [1, ; , 3]`,
	</span>
	记 `bm T = (bm epsi_1, bm epsi_2)`, `bm D = [1, ; , 3]`, 上式可以写成
	`bm (A T) = bm (T D)`.
	因为 `bm T` 是正交矩阵, 有 `bm T^-1 = bm T'`, 于是
	<span class="formula">
		`bm A = bm (T D T)'`.
	</span>
	如果 `bm x` 是二元列向量, 作变换 `bm x = bm (T y)`,
	就可以将二次型旋转到主轴上:
	<span class="formula">
		`bm x' bm (A x)`
		` = (bm y' bm T') (bm (T D T')) (bm (T y))`
		`= bm y' bm (D y)`.
	</span>
</p>

<ol class="example">
	<li>将双曲线 `y = 1/x` 化为主轴形式;</li>
	<li>将双曲线 `y = x + 1/x` 化为主轴形式;</li>
</ol>

<ol class="solution">
	<li>方程化为 `x_1 x_2 = 1`, 将系数矩阵对角化:
		<span class="formula">
			`[0, 1/2; 1/2, 0] = bm T [1/2, ; ,-1/2] bm T'`,
		</span>
		其中 `bm T = (bm epsi_1, bm epsi_2)`,
		`bm epsi_1 = 1/sqrt2(1, 1)`, `bm epsi_2 = 1/sqrt2(1,-1)`.
		这些信息告诉我们, 只要作变换 `bm x = bm (T y)`, 曲线方程就化为
		<span class="formula">
			`y_1^2/2 - y_2^2/2 = 1`.
		</span>
	</li>
	<li>方程化为 `x_1^2 - x_1 x_2 = -1`, 系数矩阵对角化得
		<span class="formula">
			`[1, -1/2; -1/2, 0] = bm T [(1+sqrt2)/2, ; ,(1-sqrt2)/2] bm T'`,
		</span>
		其中 `bm T = 1/L[1, 1-sqrt2; sqrt2-1, 1]`, `L = sqrt(4-2sqrt2)`.
		只要作变换 `bm x = bm (T y)`, 曲线就化为
		<span class="formula">
			`(1+sqrt2)/2 y_1^2 + (1-sqrt2)/2 y_2^2 = -1`,
		</span>
		即
		<span class="formula">
			`(sqrt2-1)/2 y_2^2 - (sqrt2+1)/2 y_1^2 = 1`.
		</span>
	</li>
</ol>

<p class="remark">
	一般地, 二次型 `A x^2 + B x y + C y^2` 的系数矩阵是
	`[A, B/2; B/2, C]`.
	二次曲线按特征根的符号分为三类:
	两个特征根同号为椭圆型, 异号为双曲型, 有一个特征根等于零为抛物型.
	假设 `A gt 0`, 则: `Delta = B^2 - 4 A C lt 0` 时为椭圆型,
	`Delta lt 0` 时为双曲型, `Delta = 0` 时为抛物型.
</p>

<ol class="example">
	 平面直角坐标系 `xOy` 中,
	 <li>一线段长为 `l`, 两端点分别在 `x` 轴和 `y` 轴上滑动, 求线段中点 `M` 的轨迹;</li>
	 <li>假设同 1. 设线段上一点 `P` 将线段分为长度为 `m, n` 的两段 (靠近 `y` 轴一侧为 `m`, 靠近 `x` 轴一侧为 `n`), 求 `P` 点轨迹;</li>
	 <li>假设同 2. 过 `P` 作线段的垂线 `AP = h`, 使得 `A, O` 在线段异侧,
		 求 `A` 点轨迹.
	 </li>
</ol>

<ol class="solution">
	<li>因为直角三角形斜边上的中线长等于斜边的一半, 所以 `MO` 为常数, 因此
		`M` 轨迹是以 `O` 为心, `l//2` 为半径的圆.
	</li>
	<li>设 `P` 的坐标为 `(x,y)`. 由相似三角形列出方程
		<span class="formula">
			`sqrt(m^2-x^2)/m = y/n`,
		</span>
		化简得
		<span class="formula">
			`x^2/m^2 + y^2/n^2 = 1`.
		</span>
		轨迹为椭圆.
	</li>
	<li>设 `A` 的坐标为 `(x,y)`, 线段与 `x` 轴夹角为 `theta`, 列出参数方程
		<span class="formula">
			`x = m cos theta + h sin theta`,
			`quad y = n sin theta + h cos theta`.
		</span>
		将 `m y - h x = (m n - h^2) sin theta` 代入 `(y - n sin theta)^2
		= h^2 cos^2 theta` 得
		<span class="formula">
			`(y - n (m y-h x)/(m n-h^2))^2 = h^2 (1-((m y-h x)/(m
			n-h^2))^2)`,
		</span>
		两边同乘 `(m n-h^2)^2` 并整理得
		<span class="formula">
			`(n x-h y)^2 + (m y-h x)^2 = (m n-h^2)^2`.
		</span>
		利用二元二次曲线 `A x^2 + B x y + C y^2 + D x + E y + F = 0`
		的判别式 `Delta = B^2 - 4 A C`:
		<span class="formula">
			`Delta/4 = (m+n)^2 h^2 - (m^2+h^2)(n^2+h^2)`
			`= -(m n-h^2)^2 lt 0`,
		</span>
		因此轨迹为椭圆.
	</li>
</ol>

<h2>高次曲线</h2>

<h3>三次曲线</h3>

<p class="example">
  平面上原点关于抛物线 `y = -ax^2` 在 `x=t` 处的切线
  `y + a t^2 = -2a t(x-t)`
  的对称点为
  <span class="formula">
    `(2at^2)/(1+4a^2 t^2) (2a t, 1)`.
  </span>
  利用 `y = (2at^2)/(1+4a^2 t^2)` 解出 `t^2`, 代入 `x^2` 的表达式,
  就可以消去参数 `t`, 得到:
  <span class="formula">
    `y^3 = x^2(1-2a y)`.
  </span>
</p>

<div class="img sm">
  <canvas id="exp-parabola-cubic" width="400" height="150"></canvas>
</div>

<h3>四次曲线</h3>

<p class="example">
  <b>Descartes 卵形线</b> 是平面上到两个焦点距离 `r_1, r_2` 满足 `m r_1
  + n r_2 = b` 的点的轨迹.
</p>

<p class="example">
  <b>Cassini 卵形线</b>
  是平面上到两个焦点 `(+-c, 0)` 距离之积为定值 `a^2` 的点的轨迹.
  当 `a = c` 时, 称为<b>Bernoulli 双纽线</b>. Cassini 卵形线的方程为
  <span class="formula">
    `((x-c)^2 + y^2)((x+c)^2+y^2) = a^4`,<br>
    或 `(x^2+y^2)^2 - 2c^2(x^2-y^2) = a^4-c^4`,<br>
    或 `r^4 - 2c^2 r^2 cos 2 theta = a^4 - c^4`.
  </span>
  特别, 双纽线的极坐标方程为
  <span class="formula">
    `r^2 = 2 a^2 cos 2 theta`.
  </span>
</p>

<div class="img md">
  <canvas id="exp-cassini" width="300" height="200"></canvas>
</div>

<p class="example">
  <b>极坐标下的切线方程</b>
  曲线 `r(theta)` 在点 `(theta_0, r_0)` 处的切线方程为
  <span class="formula">
    `(1/r("d"r)/("d"theta))(theta_0, r_0)`
    `= (r cos(theta-theta_0)-r_0)/(r sin(theta-theta_0))`.
  </span>
  如果记切线与 `Ox` 轴夹角为 `varphi`, 又有
  <span class="formula">
    `1/r("d"r)/("d"theta) = cot(varphi - theta)`.
  </span>
</p>

<p class="proof">
  由于
  <span class="formula">
    `dy/dx = "d"/dt (r sin theta) // "d"/dt (r cos theta)`
    `= (r' sin theta + r theta' cos theta)/(r' cos theta - r theta' sin theta)`
    `= (("d"r)/("d"theta) sin theta + r cos theta)/(("d"r)/("d"theta) cos theta - r sin theta)`,
  </span>
  故
  <span class="formula">
    `("d"r)/("d"theta) = (dy/dx r sin theta + r cos theta)/(dy/dx cos theta - sin theta)`.
    <span class="label" id="for-dr-dtheta"></span>
  </span>
  如果记 `dy/dx = tan varphi`, 则
  <span class="formula">
    `1/r("d"r)/("d"theta)`
    `= (tan varphi tan theta + 1)/(tan varphi - tan theta)`
    `= cot(varphi - theta)`.
  </span>
  现在把曲线在直角坐标下的切线方程
  <span class="formula">
    `dy/dx(x_0, y_0) = (y-y_0)/(x-x_0)`
  </span>
  代入 <a href="#for-dr-dtheta" class="ref"></a> 得
  <span class="formula">
    `("d"r)/("d"theta)(theta_0, r_0)`
    `= (r_0 sin theta_0(r sin theta-r_0 sin theta_0) + r_0 cos theta_0(r cos theta - r_0 cos theta_0))
    / (cos theta_0 (r sin theta - r_0 sin theta_0) - sin theta_0 (r cos theta - r_0 cos theta_0))`
    `= (r_0 r cos(theta-theta_0)-r_0^2)/(r sin(theta-theta_0))`.
  </span>
  整理即得结论.
</p>

<p class="proof">
  以原点为一个顶点, 三边分别为 `r_0, r_0 + "d"r, r_0"d"theta` 作曲边三角形.
  设 `P_0(theta_0, r_0)` 处的切线与 `P_0` 点处向径的垂线夹角为 `alpha`, 则
  <span class="formula">
    `(("d"r)/(r "d"theta))(theta_0, r_0) = tan alpha`.
  </span>
  延长向径 `r_0 + "d"r` 与切线交于 `(theta, r)`. 由几何关系又得到
  <span class="formula">
    `tan alpha = (r cos(theta-theta_0) - r_0)/(r sin(theta-theta_0))`.
  </span>
</p>

<script src="../../js/note.js?type=math"></script>
<script src="../../js/plot.js"></script>
<script>
new Plot('exp-parabola-cubic')
  .geometry({ xmin: -3, xmax: 3, ymin: -0.5, ymax: 1.5 }).axis()
  .plot(t => t**3/(1+t**2), t => t**2/(1+t**2), { min: -5, max: 5})

// r^2 = c^2 cos 2t +- sqrt(a^4-c^4 sin^2 2t)
const { cos, sin, sqrt, abs, PI } = Math
const f = t => sqrt(2*cos(2*t))
new Plot('exp-cassini')
  .geometry({ xmin: -1.5, xmax: 1.5, ymin: -1, ymax: 1}).axis()
  .plot(t => f(t)*cos(t), t => f(t)*sin(t), { min: -PI/4, max: PI/4 }) // 右支
  .plot(t => f(t)*cos(t), t => f(t)*sin(t), { min: 3*PI/4, max: 5*PI/4 }) // 左支
</script>
</body>
</html>
